'''
有时候，我们需要对数据内置的类型进行转换，数据类型的转换，你只需要将数据类型作为函数名即可。
以下几个内置的函数可以执行数据类型之间的转换。这些函数返回一个新的对象，表示转换的值。
'''
'''------------------------------------------------------------------------------------------------------------------'''
'''
将x转换为一个整数
int(x [,base])
class int(x, base=10)
x -- 字符串或数字。
base -- 进制数，默认十进制。
'''
int()  # 不传入参数时，得到结果0
# 0
int(3)
# 3
int(3.6)
# 3
int('12', 16)  # 如果是带参数base的话，12要以字符串的形式进行输入，12 为 16进制
# 18
int('0xa', 16)
# 10
int('10', 8)
# 8
'''------------------------------------------------------------------------------------------------------------------'''
'''
将x转换为一个长整数
long(x [,base] )
class long(x, base=10)
x -- 字符串或数字。
base -- 可选，进制数，默认十进制。
long()
# 0L
注意：python3中没有long类型，只有int类型
'''
'''------------------------------------------------------------------------------------------------------------------'''
'''
将x转换到一个浮点数
float(x)
class float([x])
x -- 整数或字符串
'''
float(1)
# 1.0
float(-123.6)
# -123.6
float('123')  # 字符串
# 123.0
'''------------------------------------------------------------------------------------------------------------------'''
'''
创建一个复数
complex(real [,imag])
class complex([real[, imag]])
real -- int, long, float或字符串；
imag -- int, long, float；
'''
complex(1, 2)
# (1 + 2j)
complex(1)  # 数字
# (1 + 0j)
complex("1")  # 当做字符串处理
# (1 + 0j)

# 注意：这个地方在"+"号两边不能有空格，也就是不能写成"1 + 2j"，应该是"1+2j"，否则会报错
complex("1+2j")
# (1 + 2j)
'''------------------------------------------------------------------------------------------------------------------'''
'''
将对象 x 转换为字符串
str(x)
class str(object='')
object -- 对象。
'''
s = 'RUNOOB'
str(s)
# 'RUNOOB'
dict = {'runoob': 'runoob.com', 'google': 'google.com'};
str(dict)
# "{'google': 'google.com', 'runoob': 'runoob.com'}"
'''------------------------------------------------------------------------------------------------------------------'''
'''
将对象 x 转换为表达式字符串
repr(x)
repr(object)
object -- 对象。
'''
s = 'RUNOOB'
repr(s)
# "'RUNOOB'"
dict = {'runoob': 'runoob.com', 'google': 'google.com'};
repr(dict)
# "{'google': 'google.com', 'runoob': 'runoob.com'}"
'''
1、内建函数str()和repr() 或反引号操作符（``）可以方便地以字符串的方式获取对象的内容、类型、数值属性等信息。
2、str()函数得到的字符串可读性好（故被print调用）
3、repr()函数得到的字符串通常可以用来重新获得该对象，通常情况下 obj==eval(repr(obj)) 这个等式是成立的。这两个函数接受一个对象作为其参数，返回适当的字符串。
4、事实上repr()和``做一样的事情，返回一个对象的“官方”字符串表示。其结果绝大多数情况下（不是所有）可以通过求值运算（内建函数eval()）重新得到该对象。
str()则不同，它生成一个对象的可读性好的字符串表示，结果通常无法用eval()求值，但适合print输出。
'''
'''------------------------------------------------------------------------------------------------------------------'''
'''
用来计算在字符串中的有效Python表达式,并返回一个对象
eval(str)
eval(expression[, globals[, locals]])
expression -- 表达式。
globals -- 变量作用域，全局命名空间，如果被提供，则必须是一个字典对象。
locals -- 变量作用域，局部命名空间，如果被提供，可以是任何映射对象。
'''
x = 7
eval('3 * x')
# 21
eval('pow(2,2)')
# 4
eval('2 + 2')
# 4
n = 81
eval("n + 4")
# 85
'''------------------------------------------------------------------------------------------------------------------'''
'''
将序列 s 转换为一个元组
tuple(s)
tuple( seq )
seq -- 要转换为元组的序列。
'''
tuple([1, 2, 3, 4])
# (1, 2, 3, 4)
tuple({1: 2, 3: 4})  # 针对字典 会返回字典的key组成的tuple
# (1, 3)
tuple((1, 2, 3, 4))  # 元组会返回元组自身
# (1, 2, 3, 4)
'''------------------------------------------------------------------------------------------------------------------'''
'''
将序列 s 转换为一个列表
list(s)
list( tup )
tup -- 要转换为列表的元组。
'''
aTuple = (123, 'xyz', 'zara', 'abc')
aList = list(aTuple)
print("列表元素 : ", aList)
'''------------------------------------------------------------------------------------------------------------------'''
'''
转换为可变集合
set(s)
class set([iterable])
iterable -- 可迭代对象对象；
返回新的集合对象。
'''
x = set('runoob')
y = set('google')
x, y
# (set(['b', 'r', 'u', 'o', 'n']), set(['e', 'o', 'g', 'l']))  # 重复的被删除
x & y  # 交集
# set(['o'])
x | y  # 并集
# set(['b', 'e', 'g', 'l', 'o', 'n', 'r', 'u'])
x - y  # 差集
# set(['r', 'b', 'u', 'n'])
'''------------------------------------------------------------------------------------------------------------------'''
'''
创建一个字典。d 必须是一个序列 (key,value)元组。
dict(d)
class dict(**kwarg)
class dict(mapping, **kwarg)
class dict(iterable, **kwarg)
**kwargs -- 关键字
mapping -- 元素的容器。
iterable -- 可迭代对象。
返回一个字典。
dict()  # 创建空字典
# {}
dict(a='a', b='b', t='t')  # 传入关键字
# {'a': 'a', 'b': 'b', 't': 't'}
dict(zip(['one', 'two', 'three'], [1, 2, 3]))  # 映射函数方式来构造字典
# {'three': 3, 'two': 2, 'one': 1}
dict([('one', 1), ('two', 2), ('three', 3)])  # 可迭代对象方式来构造字典
# {'three': 3, 'two': 2, 'one': 1}
'''
'''------------------------------------------------------------------------------------------------------------------'''
'''
转换为不可变集合
frozenset(s)
class frozenset([iterable])
iterable -- 可迭代的对象，比如列表、字典、元组等等。
返回新的 frozenset 对象，如果不提供任何参数，默认会生成空集合。
'''
a = frozenset(range(10))     # 生成一个新的不可变集合
a
# frozenset([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
b = frozenset('runoob')
b
# frozenset(['b', 'r', 'u', 'o', 'n'])   # 创建不可变集合
'''------------------------------------------------------------------------------------------------------------------'''
'''
将一个整数转换为一个字符
chr(x)
chr() 用一个范围在 range（256）内的（就是0～255）整数作参数，返回一个对应的字符。
x -- 可以是10进制也可以是16进制的形式的数字。
返回值是当前整数对应的 ASCII 字符。
'''
print(chr(0x30), chr(0x31), chr(0x61))   # 十六进制
# 0 1 a
print(chr(48), chr(49), chr(97))         # 十进制
#0 1 a
'''------------------------------------------------------------------------------------------------------------------'''
'''
将一个整数转换为Unicode字符
unichr(x)
unichr() 函数 和 chr()函数功能基本一样， 只不过是返回 unicode 的字符。
x -- 可以是10进制也可以是16进制的形式的数字。
返回 unicode 的字符。
unichr(97)
# u'a'
unichr(98)
# u'b'
unichr(99)
# u'c'
注意：python3中不能使用unichr
'''
'''------------------------------------------------------------------------------------------------------------------'''
'''
将一个字符转换为它的整数值
ord(x)
x -- 字符。
ord() 函数是 chr() 函数（对于8位的ASCII字符串）或 unichr() 函数（对于Unicode对象）的配对函数，
它以一个字符（长度为1的字符串）作为参数，返回对应的 ASCII 数值，或者 Unicode 数值，
如果所给的 Unicode 字符超出了你的 Python 定义范围，则会引发一个 TypeError 的异常。
返回值是对应的十进制整数。
'''
ord('a')
# 97
ord('b')
# 98
ord('c')
# 99
'''------------------------------------------------------------------------------------------------------------------'''
'''
将一个整数转换为一个十六进制字符串
hex(x)
x -- 10进制整数
hex() 函数用于将10进制整数转换成16进制，以字符串形式表示。
返回16进制数，以字符串形式表示。
'''
hex(255)
# '0xff'
hex(-42)
# '-0x2a'
# hex(1L)
# '0x1L'
hex(12)
# '0xc'
type(hex(12))
# <class 'str'>      # 字符串
'''------------------------------------------------------------------------------------------------------------------'''
'''
将一个整数转换为一个八进制字符串
oct(x)
x -- 整数。
oct() 函数将一个整数转换成8进制字符串。
返回8进制字符串。
'''
oct(10)
# '012'
oct(20)
# '024'
oct(15)
# '017'
'''------------------------------------------------------------------------------------------------------------------'''
